{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np \n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt \n",
    "import seaborn as sns \n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_data = pd.read_csv(r'D:\\CSDN_HOMEWORK\\third_week_work\\boston_housing.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>RAD</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "      <th>MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.00632</td>\n",
       "      <td>18</td>\n",
       "      <td>2.31</td>\n",
       "      <td>0</td>\n",
       "      <td>0.538</td>\n",
       "      <td>6.575</td>\n",
       "      <td>65.2</td>\n",
       "      <td>4.0900</td>\n",
       "      <td>1</td>\n",
       "      <td>296</td>\n",
       "      <td>15</td>\n",
       "      <td>396.90</td>\n",
       "      <td>4.98</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.02731</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>6.421</td>\n",
       "      <td>78.9</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>396.90</td>\n",
       "      <td>9.14</td>\n",
       "      <td>21.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.02729</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>7.185</td>\n",
       "      <td>61.1</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>392.83</td>\n",
       "      <td>4.03</td>\n",
       "      <td>34.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.03237</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>6.998</td>\n",
       "      <td>45.8</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>394.63</td>\n",
       "      <td>2.94</td>\n",
       "      <td>33.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.06905</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>7.147</td>\n",
       "      <td>54.2</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>396.90</td>\n",
       "      <td>5.33</td>\n",
       "      <td>36.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      CRIM  ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD  TAX  PTRATIO  \\\n",
       "0  0.00632  18   2.31     0  0.538  6.575  65.2  4.0900    1  296       15   \n",
       "1  0.02731   0   7.07     0  0.469  6.421  78.9  4.9671    2  242       17   \n",
       "2  0.02729   0   7.07     0  0.469  7.185  61.1  4.9671    2  242       17   \n",
       "3  0.03237   0   2.18     0  0.458  6.998  45.8  6.0622    3  222       18   \n",
       "4  0.06905   0   2.18     0  0.458  7.147  54.2  6.0622    3  222       18   \n",
       "\n",
       "        B  LSTAT  MEDV  \n",
       "0  396.90   4.98  24.0  \n",
       "1  396.90   9.14  21.6  \n",
       "2  392.83   4.03  34.7  \n",
       "3  394.63   2.94  33.4  \n",
       "4  396.90   5.33  36.2  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 506 entries, 0 to 505\n",
      "Data columns (total 14 columns):\n",
      " #   Column   Non-Null Count  Dtype  \n",
      "---  ------   --------------  -----  \n",
      " 0   CRIM     506 non-null    float64\n",
      " 1   ZN       506 non-null    int64  \n",
      " 2   INDUS    506 non-null    float64\n",
      " 3   CHAS     506 non-null    int64  \n",
      " 4   NOX      506 non-null    float64\n",
      " 5   RM       506 non-null    float64\n",
      " 6   AGE      506 non-null    float64\n",
      " 7   DIS      506 non-null    float64\n",
      " 8   RAD      506 non-null    int64  \n",
      " 9   TAX      506 non-null    int64  \n",
      " 10  PTRATIO  506 non-null    int64  \n",
      " 11  B        506 non-null    float64\n",
      " 12  LSTAT    506 non-null    float64\n",
      " 13  MEDV     506 non-null    float64\n",
      "dtypes: float64(9), int64(5)\n",
      "memory usage: 55.5 KB\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>RAD</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "      <th>MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "      <td>506.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.613524</td>\n",
       "      <td>11.347826</td>\n",
       "      <td>11.136779</td>\n",
       "      <td>0.069170</td>\n",
       "      <td>0.554695</td>\n",
       "      <td>6.284634</td>\n",
       "      <td>68.574901</td>\n",
       "      <td>3.795043</td>\n",
       "      <td>9.549407</td>\n",
       "      <td>408.237154</td>\n",
       "      <td>18.083004</td>\n",
       "      <td>356.674032</td>\n",
       "      <td>12.653063</td>\n",
       "      <td>22.532806</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>8.601545</td>\n",
       "      <td>23.310593</td>\n",
       "      <td>6.860353</td>\n",
       "      <td>0.253994</td>\n",
       "      <td>0.115878</td>\n",
       "      <td>0.702617</td>\n",
       "      <td>28.148861</td>\n",
       "      <td>2.105710</td>\n",
       "      <td>8.707259</td>\n",
       "      <td>168.537116</td>\n",
       "      <td>2.280574</td>\n",
       "      <td>91.294864</td>\n",
       "      <td>7.141062</td>\n",
       "      <td>9.197104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.006320</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.460000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.385000</td>\n",
       "      <td>3.561000</td>\n",
       "      <td>2.900000</td>\n",
       "      <td>1.129600</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>187.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>0.320000</td>\n",
       "      <td>1.730000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.082045</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.190000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.449000</td>\n",
       "      <td>5.885500</td>\n",
       "      <td>45.025000</td>\n",
       "      <td>2.100175</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>279.000000</td>\n",
       "      <td>17.000000</td>\n",
       "      <td>375.377500</td>\n",
       "      <td>6.950000</td>\n",
       "      <td>17.025000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.256510</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>9.690000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.538000</td>\n",
       "      <td>6.208500</td>\n",
       "      <td>77.500000</td>\n",
       "      <td>3.207450</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>330.000000</td>\n",
       "      <td>19.000000</td>\n",
       "      <td>391.440000</td>\n",
       "      <td>11.360000</td>\n",
       "      <td>21.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>3.677082</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>18.100000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.624000</td>\n",
       "      <td>6.623500</td>\n",
       "      <td>94.075000</td>\n",
       "      <td>5.188425</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>666.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>396.225000</td>\n",
       "      <td>16.955000</td>\n",
       "      <td>25.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>88.976200</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>27.740000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.871000</td>\n",
       "      <td>8.780000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>12.126500</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>711.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>396.900000</td>\n",
       "      <td>37.970000</td>\n",
       "      <td>50.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             CRIM          ZN       INDUS        CHAS         NOX          RM  \\\n",
       "count  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000   \n",
       "mean     3.613524   11.347826   11.136779    0.069170    0.554695    6.284634   \n",
       "std      8.601545   23.310593    6.860353    0.253994    0.115878    0.702617   \n",
       "min      0.006320    0.000000    0.460000    0.000000    0.385000    3.561000   \n",
       "25%      0.082045    0.000000    5.190000    0.000000    0.449000    5.885500   \n",
       "50%      0.256510    0.000000    9.690000    0.000000    0.538000    6.208500   \n",
       "75%      3.677082   12.000000   18.100000    0.000000    0.624000    6.623500   \n",
       "max     88.976200  100.000000   27.740000    1.000000    0.871000    8.780000   \n",
       "\n",
       "              AGE         DIS         RAD         TAX     PTRATIO           B  \\\n",
       "count  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000   \n",
       "mean    68.574901    3.795043    9.549407  408.237154   18.083004  356.674032   \n",
       "std     28.148861    2.105710    8.707259  168.537116    2.280574   91.294864   \n",
       "min      2.900000    1.129600    1.000000  187.000000   12.000000    0.320000   \n",
       "25%     45.025000    2.100175    4.000000  279.000000   17.000000  375.377500   \n",
       "50%     77.500000    3.207450    5.000000  330.000000   19.000000  391.440000   \n",
       "75%     94.075000    5.188425   24.000000  666.000000   20.000000  396.225000   \n",
       "max    100.000000   12.126500   24.000000  711.000000   22.000000  396.900000   \n",
       "\n",
       "            LSTAT        MEDV  \n",
       "count  506.000000  506.000000  \n",
       "mean    12.653063   22.532806  \n",
       "std      7.141062    9.197104  \n",
       "min      1.730000    5.000000  \n",
       "25%      6.950000   17.025000  \n",
       "50%     11.360000   21.200000  \n",
       "75%     16.955000   25.000000  \n",
       "max     37.970000   50.000000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_data.info()\n",
    "df_data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAASC0lEQVR4nO3df4xlZX3H8feHBQvVNYgMZAusi4ZUjD8WM11IaCusP4I/qmg0itZSQ7o2aouR/kBjqrS10VSkahvjWpBNIyhR+aHB1i2i1qRdXGCB3a4GRYrIdneNUsBaLPDtH/dsd3Z2ZucCc+6dmef9Sm7mnOeee893TvZ+5uxznvucVBWSpHYcNO4CJEmjZfBLUmMMfklqjMEvSY0x+CWpMQePu4BhHHnkkbVq1apxlyFJi8qNN97446qamN6+KIJ/1apVbN68edxlSNKikuQ/Zmq3q0eSGmPwS1JjDH5JaozBL0mNMfglqTEGvyQ1xuCXpMYY/JLUGINfkhqzKL65K83lsk13zdj+xpNXjrgSaeHzjF+SGmPwS1JjDH5JaozBL0mN8eKuRsKLr9LC4Rm/JDXG4JekxvQW/EkOTXJDkluSbEtyQdd+aZIfJNnSPVb3VYMkaX999vE/CKytqgeSHAJ8K8lXuuf+uKo+3+O+JUmz6C34q6qAB7rVQ7pH9bU/SdJweu3jT7IsyRZgF7CxqjZ1T30gya1JLkryS7O8dl2SzUk27969u88yJakpvQZ/VT1cVauBY4E1SZ4NvBt4JvBrwBHAn87y2vVVNVlVkxMTE32WKUlNGcmonqq6F/g6cEZV7aiBB4FPA2tGUYMkaaDPUT0TSQ7vlg8DXgR8J8mKri3AmcDWvmqQJO2vz1E9K4ANSZYx+ANzRVV9OcnXkkwAAbYAv99jDZKkafoc1XMrcNIM7Wv72qckaW5+c1eSGmPwS1JjDH5JaozBL0mNMfglqTHeiEULkjdukfrjGb8kNcbgl6TGGPyS1BiDX5IaY/BLUmMMfklqjMEvSY0x+CWpMQa/JDXG4Jekxhj8ktQYg1+SGmPwS1Jjegv+JIcmuSHJLUm2Jbmgaz8+yaYktyf5XJIn9FWDJGl/fZ7xPwisrarnAauBM5KcAnwIuKiqTgB+CpzTYw2SpGl6C/4aeKBbPaR7FLAW+HzXvgE4s68aJEn767WPP8myJFuAXcBG4PvAvVX1ULfJ3cAxs7x2XZLNSTbv3r27zzIlqSm9Bn9VPVxVq4FjgTXAiTNtNstr11fVZFVNTkxM9FmmJDVlJKN6qupe4OvAKcDhSfbc8vFY4J5R1CBJGuhzVM9EksO75cOAFwHbgeuB13abnQ1c3VcNkqT99Xmz9RXAhiTLGPyBuaKqvpzk34HPJvlL4Gbg4h5rkCRN01vwV9WtwEkztN/BoL9f4rJNd427BKk5fnNXkhpj8EtSYwx+SWqMwS9JjTH4JakxfQ7nVGNGMULHUUDS4+cZvyQ1xuCXpMYY/JLUGINfkhpj8EtSYwx+SWqMwS9JjTH4JakxBr8kNcbgl6TGGPyS1BiDX5IaY/BLUmN6C/4kxyW5Psn2JNuSnNu1vz/Jj5Js6R4v66sGSdL++pyW+SHgvKq6Kcly4MYkG7vnLqqqD/e4b0nSLHoL/qraAezolu9Psh04pq/9SZKGM5I+/iSrgJOATV3TO5LcmuSSJE+Z5TXrkmxOsnn37t2jKFOSmtB78Cd5EvAF4J1VdR/wCeAZwGoG/yO4cKbXVdX6qpqsqsmJiYm+y5SkZvQa/EkOYRD6n6mqLwJU1c6qeriqHgE+BazpswZJ0r76HNUT4GJge1V9ZEr7iimbvRrY2lcNkqT99Tmq51TgzcBtSbZ0be8BzkqyGijgTuCtPdYgSZqmz1E93wIyw1PX9rVPSdLc/OauJDXG4Jekxhj8ktQYg1+SGmPwS1Jj+hzOqZ5dtumuGdvfePLKEVciaTHxjF+SGmPwS1Jj5gz+JAclcVoFSVoi5gz+bjK1W5LYcSxJS8CwF3dXANuS3AD8bE9jVb2yl6okSb0ZNvgv6LUKSdLIDBX8VfWNJE8DTqiqf07yy8CyfkuTJPVhqFE9SX4P+Dzwya7pGOCqvoqSJPVn2OGcb2cwv/59AFV1O3BUX0VJkvozbPA/WFW/2LOS5GAGN1KRJC0yw17c/UaS9wCHJXkx8DbgS/2VJc0Pp7WQ9jfsGf/5wG7gNga3SrwWeG9fRUmS+jPsqJ5HkmwANjHo4vluVdnVI0mL0LCjel4OfB/4GPC3wPeSvHSO1xyX5Pok25NsS3Ju135Eko1Jbu9+PuXx/hKSpOEN29VzIXB6VZ1WVS8ATgcumuM1DwHnVdWJwCnA25M8i0G30XVVdQJwXbcuSRqRYYN/V1V9b8r6HcCuA72gqnZU1U3d8v3Adgbj/18FbOg22wCc+agqliQ9Lgfs40/ymm5xW5JrgSsY9PG/Dvj2sDtJsgo4icE1gqOragcM/jgkmfH7AEnWAesAVq50BIYkzZe5Lu7+1pTlncALuuXdwFB980meBHwBeGdV3ZdkqMKqaj2wHmByctILyZI0Tw4Y/FX1lsfz5kkOYRD6n6mqL3bNO5Os6M72VzBHl5EkaX4NNZwzyfHAHwCrpr7mQNMyZ3BqfzGwvao+MuWpa4CzgQ92P69+1FVLkh6zYb+5exWDEP8S8MiQrzkVeDNwW5ItXdt7GAT+FUnOAe5icL1AkjQiwwb//1TVxx7NG1fVt4DZOvRf+GjeS/PD6QskwfDB/9Ek7wO+Cjy4p3HPcE1J0uIxbPA/h0G3zVr2dvVUty5JWkSGDf5XA0+fOjWzJGlxGvabu7cAh/dZiCRpNIY94z8a+E6Sb7NvH/+swzklSQvTsMH/vl6r0KIy2+ggSYvDsPPxf6PvQiRJozHsN3fvZ+89dp8AHAL8rKqe3FdhkqR+DHvGv3zqepIzgTW9VCRJ6tWwo3r2UVVX4Rh+SVqUhu3qec2U1YOASfZ2/UiSFpFhR/VMnZf/IeBOBnfSkiQtMsP28T+uefklSQvHXLde/LMDPF1V9RfzXI8kqWdznfH/bIa2JwLnAE8FDH5JWmTmuvXihXuWkywHzgXeAnwWuHC210mSFq45+/iTHAG8C3gTsAF4flX9tO/CNH5OzSCNxoE+a33cKGmuPv6/Bl4DrAeeU1UPzHsFkqSRmusLXOcBvwK8F7gnyX3d4/4k9/VfniRpvh0w+KvqoKo6rKqWV9WTpzyWzzVPT5JLkuxKsnVK2/uT/CjJlu7xsvn6RSRJw3lMUzYM6VLgjBnaL6qq1d3j2h73L0maQW/BX1XfBH7S1/tLkh6bYadsmE/vSPI7wGbgvNlGCCVZB6wDWLly/q9qL2WOxpnbbMeojxEU0kLTZ1fPTD4BPANYDezgAN8FqKr1VTVZVZMTExOjqk+SlryRBn9V7ayqh6vqEeBTOKe/JI3cSIM/yYopq68Gts62rSSpH7318Se5HDgNODLJ3Qxu2H5aktUM5vK/E3hrX/uXJM2st+CvqrNmaL64r/3psfNisNSWUV/clSSNmcEvSY0x+CWpMQa/JDXG4Jekxhj8ktQYg1+SGmPwS1JjDH5JaozBL0mNMfglqTEGvyQ1xuCXpMYY/JLUGINfkhpj8EtSY3q7EYvUgtluYvPGk1eOuBJpeJ7xS1JjDH5JakxvwZ/kkiS7kmyd0nZEko1Jbu9+PqWv/UuSZtbnGf+lwBnT2s4HrquqE4DrunVJ0gj1FvxV9U3gJ9OaXwVs6JY3AGf2tX9J0sxGParn6KraAVBVO5IcNduGSdYB6wBWrmxjhIQjRCSNwoK9uFtV66tqsqomJyYmxl2OJC0Zow7+nUlWAHQ/d414/5LUvFEH/zXA2d3y2cDVI96/JDWvz+GclwP/CvxqkruTnAN8EHhxktuBF3frkqQR6u3iblWdNctTL+xrn9JCMduF+gPxIr5GZcFe3JUk9cPgl6TGGPyS1BiDX5IaY/BLUmO8EcsYPNoRH49lhIja9Win/nCqkPZ4xi9JjTH4JakxBr8kNcbgl6TGGPyS1BhH9UzjHCuayThHVjmqS/PNM35JaozBL0mNMfglqTEGvyQ1xou7PfKinKSFyDN+SWqMwS9JjRlLV0+SO4H7gYeBh6pqchx1SFKLxtnHf3pV/XiM+5ekJtnVI0mNGdcZfwFfTVLAJ6tq/fQNkqwD1gGsXOmUCFr6FtooMG/QsnSN64z/1Kp6PvBS4O1JfnP6BlW1vqomq2pyYmJi9BVK0hI1luCvqnu6n7uAK4E146hDklo08uBP8sQky/csAy8Bto66Dklq1Tj6+I8GrkyyZ/+XVdU/jqEOSWrSyIO/qu4Anjfq/UrDWGgXWBciL/oufg7nlKTGGPyS1BiDX5IaY/BLUmMMfklqzJK/EcsoRiA4EkTSMBZKVnjGL0mNMfglqTEGvyQ1xuCXpMYY/JLUmCU/qkfSQN8jSpbyCLqlNg+RZ/yS1BiDX5IaY/BLUmMMfklqTLMXdxfKV6elpe6xfNYW2sXUR/s7LLT6p/OMX5IaY/BLUmPGEvxJzkjy3STfS3L+OGqQpFaNPPiTLAP+Dngp8CzgrCTPGnUdktSqcZzxrwG+V1V3VNUvgM8CrxpDHZLUpHGM6jkG+OGU9buBk6dvlGQdsK5bfSDJd0dQW5+OBH487iIWEI/HXh6LfR35pkV+PN40v+/1eP59PG2mxnEEf2Zoq/0aqtYD6/svZzSSbK6qyXHXsVB4PPbyWOzL47GvPo7HOLp67gaOm7J+LHDPGOqQpCaNI/i/DZyQ5PgkTwDeAFwzhjokqUkj7+qpqoeSvAP4J2AZcElVbRt1HWOwZLqt5onHYy+Pxb48Hvua9+ORqv261yVJS5jf3JWkxhj8ktQYg78HSS5JsivJ1iltRyTZmOT27udTxlnjqCQ5Lsn1SbYn2Zbk3K691eNxaJIbktzSHY8Luvbjk2zqjsfnuoEPTUiyLMnNSb7crbd8LO5McluSLUk2d23z/lkx+PtxKXDGtLbzgeuq6gTgum69BQ8B51XVicApwNu7KTpaPR4PAmur6nnAauCMJKcAHwIu6o7HT4FzxljjqJ0LbJ+y3vKxADi9qlZPGbs/758Vg78HVfVN4CfTml8FbOiWNwBnjrSoMamqHVV1U7d8P4MP+DG0ezyqqh7oVg/pHgWsBT7ftTdzPJIcC7wc+PtuPTR6LA5g3j8rBv/oHF1VO2AQhsBRY65n5JKsAk4CNtHw8ei6NrYAu4CNwPeBe6vqoW6Tuxn8cWzB3wB/AjzSrT+Vdo8FDE4Cvprkxm7aGujhs9LsHbg0WkmeBHwBeGdV3Tc4sWtTVT0MrE5yOHAlcOJMm422qtFL8gpgV1XdmOS0Pc0zbLrkj8UUp1bVPUmOAjYm+U4fO/GMf3R2JlkB0P3cNeZ6RibJIQxC/zNV9cWuudnjsUdV3Qt8ncG1j8OT7DkRa2Uak1OBVya5k8EsvWsZ/A+gxWMBQFXd0/3cxeCkYA09fFYM/tG5Bji7Wz4buHqMtYxM12d7MbC9qj4y5alWj8dEd6ZPksOAFzG47nE98NpusyaOR1W9u6qOrapVDKZu+VpVvYkGjwVAkicmWb5nGXgJsJUePit+c7cHSS4HTmMwnepO4H3AVcAVwErgLuB1VTX9AvCSk+TXgX8BbmNvP+57GPTzt3g8nsvgAt0yBideV1TVnyd5OoOz3iOAm4HfrqoHx1fpaHVdPX9UVa9o9Vh0v/eV3erBwGVV9YEkT2WePysGvyQ1xq4eSWqMwS9JjTH4JakxBr8kNcbgl6TGGPxSJ0kl+Ycp6wcn2T1l1sjf7da3THk8K8mqJD/vZpjc3s2+eXb3mlVJ7k5y0LR9bUmyZrS/oTTglA3SXj8Dnp3ksKr6OfBi4EfTtvlcVb1jakM3B9H3q+qkbv3pwBeTHFRVn07yQ+A3gG90zz8TWF5VN/T620iz8Ixf2tdXGMwWCXAWcPmjfYOqugN4F/CHXdPlDL6ZuscbHsv7SvPF4Jf29VngDUkOBZ7L4BvGU71+WlfPYbO8z03AM7vlK4Azp8w/8/puP9JY2NUjTVFVt3ZdN2cB186wyUxdPTO91f83VtV/JtkGvDDJTuB/q2rrTC+SRsHgl/Z3DfBhBvMtPfUxvsdJ7HtXqT3dPTuxm0djZvBL+7sE+K+qum3KPPFD6/7H8GHg41OavwD8FfDfDKYflsbG4Jemqaq7gY/O8vTruxlH93gbg/nin5HkZuBQ4H7g41X16SnveW+Sf2NwN6Uf9FS6NBRn55SkxjiqR5IaY/BLUmMMfklqjMEvSY0x+CWpMQa/JDXG4JekxvwfnP4Y/XFjn8kAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x180fe127b70>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD6CAYAAABamQdMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAATv0lEQVR4nO3db5Bd9X3f8fen4D8YJQiM2aGS2iWN7JpYjmM2DC1tZwVpjIPH4oGZgZJEJGQ0aalLG3liSB7QdoYpaYc4ybR1Ry0M8ozLmlI7MNhpTAkbmpmAI/mfwJiiYhULCKrHQLIOgyvn2wd7VHbFir17/+xd/fb9mtHsPb/z23O++517P3t09txzU1VIktryV8ZdgCRp+Ax3SWqQ4S5JDTLcJalBhrskNchwl6QGLRvuSe5IciTJY8eNfzTJk0keT/KvF4zflORgt+4DoyhakvTGTu1hzp3AvwU+dWwgyXZgB/Deqno1yTnd+PnAVcCPAX8V+O9J3llVP3ijHZx99tk1OTnZ1w+wVnzve9/j9NNPH3cZa4b9WMx+vMZeLDZIP/bv3/+dqnrHUuuWDfeqejjJ5HHD/xC4tape7eYc6cZ3ADPd+LeSHAQuBP74jfYxOTnJvn37litlTZudnWV6enrcZawZ9mMx+/Eae7HYIP1I8r9PtK7fc+7vBP5ukkeT/GGSn+zGNwHfXjDvcDcmSVpFvZyWOdH3nQlcBPwkcHeSHwGyxNwl72+QZBewC2BiYoLZ2dk+S1kb5ubmTvqfYZjsx2L24zX2YrFR9aPfcD8MfLbmb0zzpSR/CZzdjW9ZMG8z8NxSG6iqPcAegKmpqTrZ/5vmfzUXsx+L2Y/X2IvFRtWPfk/L/C5wCUCSdwJvBr4D3AdcleQtSc4DtgJfGkahkqTeLXvknuQuYBo4O8lh4GbgDuCO7vLI7wM7u6P4x5PcDXwDOApcv9yVMpKk4evlapmrT7DqZ08w/xbglkGKkiQNxneoSlKDDHdJapDhLkkN6vdSSK1Tkzd+vqd5u7cd5doe5/bi0K2XD21b0nrgkbskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJatCy4Z7kjiRHus9LPX7dx5JUkrO75ST5nSQHk3w9yftHUbQk6Y31cuR+J3DZ8YNJtgB/H3hmwfAHga3dv13AJwcvUZK0UsuGe1U9DHx3iVWfAH4VqAVjO4BP1bxHgI1Jzh1KpZKknvV1zj3Jh4Fnq+prx63aBHx7wfLhbkyStIpW/DF7Sd4G/Drw00utXmKslhgjyS7mT90wMTHB7OzsSktZU+bm5k76n6EXu7cd7WnexGm9z+3Fyd7b9fL86IW9WGxU/ejnM1T/BnAe8LUkAJuBLye5kPkj9S0L5m4GnltqI1W1B9gDMDU1VdPT032UsnbMzs5ysv8Mvej1c1F3bzvKbQeG9xG9h66ZHtq2xmG9PD96YS8WG1U/VnxapqoOVNU5VTVZVZPMB/r7q+pPgfuAn++umrkIeLmqnh9uyZKk5fRyKeRdwB8D70pyOMl1bzD9C8DTwEHgPwL/aChVSpJWZNn/N1fV1cusn1zwuIDrBy9LkjQI36EqSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBvXyG6h1JjiR5bMHYv0nyzSRfT/K5JBsXrLspycEkTyb5wKgKlySdWC9H7ncClx039gDwnqp6L/A/gZsAkpwPXAX8WPc9/z7JKUOrVpLUk2XDvaoeBr573NgXq+pot/gIsLl7vAOYqapXq+pbwEHgwiHWK0nqwalD2MYvAp/pHm9iPuyPOdyNvU6SXcAugImJCWZnZ4dQyvjMzc2d9D9DL3ZvO7r8JGDitN7n9uJk7+16eX70wl4sNqp+DBTuSX4dOAp8+tjQEtNqqe+tqj3AHoCpqamanp4epJSxm52d5WT/GXpx7Y2f72ne7m1Hue3AMI4d5h26Znpo2xqH9fL86IW9WGxU/ej71ZdkJ/Ah4NKqOhbgh4EtC6ZtBp7rvzxJUj/6uhQyyWXAx4EPV9VfLFh1H3BVkrckOQ/YCnxp8DIlSSux7JF7kruAaeDsJIeBm5m/OuYtwANJAB6pql+uqseT3A18g/nTNddX1Q9GVbwkaWnLhntVXb3E8O1vMP8W4JZBipIkDcZ3qEpSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJatCy4Z7kjiRHkjy2YOysJA8kear7emY3niS/k+Rgkq8nef8oi5ckLa2XI/c7gcuOG7sReLCqtgIPdssAHwS2dv92AZ8cTpmSpJVYNtyr6mHgu8cN7wD2do/3AlcsGP9UzXsE2Jjk3GEVK0nqTapq+UnJJHB/Vb2nW36pqjYuWP9iVZ2Z5H7g1qr6o278QeDjVbVviW3uYv7onomJiQtmZmaG8OOMz9zcHBs2bBh3GSN34NmXe5o3cRq88Mrw9rtt0xnD29gYrJfnRy/sxWKD9GP79u37q2pqqXWnDlTV62WJsSV/e1TVHmAPwNTUVE1PTw+5lNU1OzvLyf4z9OLaGz/f07zd245y24HhPb0OXTM9tG2Nw3p5fvTCXiw2qn70e7XMC8dOt3Rfj3Tjh4EtC+ZtBp7rvzxJUj/6Dff7gJ3d453AvQvGf767auYi4OWqen7AGiVJK7Ts/5uT3AVMA2cnOQzcDNwK3J3kOuAZ4Mpu+heAnwEOAn8B/MIIapYkLWPZcK+qq0+w6tIl5hZw/aBFSZIG4ztUJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNGvYHZEsjMdnjB3OPwqFbLx/bvqV+eeQuSQ0aKNyT/LMkjyd5LMldSd6a5LwkjyZ5Kslnkrx5WMVKknrT92mZJJuAfwKcX1WvJLkbuIr5D8j+RFXNJPkPwHXAJ4dSrYDxnqKQdHIY9LTMqcBpSU4F3gY8D1wC3NOt3wtcMeA+JEkrlKrq/5uTG4BbgFeALwI3AI9U1Y9267cAv1dV71nie3cBuwAmJiYumJmZ6buOtWBubo4NGzasyr4OPPvyquxnEBOnwQuvjLuK4di26YyBt7Gaz4+1zl4sNkg/tm/fvr+qppZaN8hpmTOBHcB5wEvAfwE+uMTUJX97VNUeYA/A1NRUTU9P91vKmjA7O8tq/QzXngSnZXZvO8ptB9q4GOvQNdMDb2M1nx9rnb1YbFT9GOS0zE8B36qq/1NV/xf4LPC3gY3daRqAzcBzA9YoSVqhQcL9GeCiJG9LEuBS4BvAQ8BHujk7gXsHK1GStFJ9h3tVPcr8H06/DBzotrUH+DjwK0kOAm8Hbh9CnZKkFRjopGhV3QzcfNzw08CFg2xXkjQY36EqSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBA4V7ko1J7knyzSRPJPlbSc5K8kCSp7qvZw6rWElSbwY9cv9t4L9V1d8Efhx4ArgReLCqtgIPdsuSpFXUd7gn+WHg7wG3A1TV96vqJWAHsLebthe4YtAiJUkrk6rq7xuT9wF7gG8wf9S+H7gBeLaqNi6Y92JVve7UTJJdwC6AiYmJC2ZmZvqqY62Ym5tjw4YNq7KvA8++vCr7GcTEafDCK+OuYji2bTpj4G2s5vNjrbMXiw3Sj+3bt++vqqml1g0S7lPAI8DFVfVokt8G/gz4aC/hvtDU1FTt27evrzrWitnZWaanp1dlX5M3fn5V9jOI3duOctuBU8ddxlAcuvXygbexms+Ptc5eLDZIP5KcMNwHOed+GDhcVY92y/cA7wdeSHJut+NzgSMD7EOS1Ie+w72q/hT4dpJ3dUOXMn+K5j5gZze2E7h3oAolSSs26P+bPwp8OsmbgaeBX2D+F8bdSa4DngGuHHAfkqQVGijcq+qrwFLney4dZLuSpMH4DlVJalAblzOMycKrVnZvO8q1J8FVLJLWB4/cJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNGjjck5yS5CtJ7u+Wz0vyaJKnknym+3xVSdIqGsaR+w3AEwuWfwP4RFVtBV4ErhvCPiRJKzDQx+wl2QxcDtwC/EqSAJcA/6Cbshf458AnB9mPNE6TQ/j4xH4+hvHQrZcPvF+tX6mq/r85uQf4V8APAR8DrgUeqaof7dZvAX6vqt6zxPfuAnYBTExMXDAzM9N3HeNy4NmX///jidPghVfGWMwaYz8W66cf2zadMZpixmxubo4NGzaMu4w1Y5B+bN++fX9VTS21ru8j9yQfAo5U1f4k08eGl5i65G+PqtoD7AGYmpqq6enppaatadce9wHZtx3w88aPsR+L9dOPQ9dMj6aYMZudneVkfL2Pyqj6Mcir72Lgw0l+Bngr8MPAbwEbk5xaVUeBzcBzg5cpSVqJvv+gWlU3VdXmqpoErgL+oKquAR4CPtJN2wncO3CVkqQVGcV17h9n/o+rB4G3A7ePYB+SpDcwlJOiVTULzHaPnwYuHMZ2JUn98R2qktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yJt/SGvUMO5G2Q/vRtkGj9wlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBfYd7ki1JHkryRJLHk9zQjZ+V5IEkT3VfzxxeuZKkXgxy5H4U2F1V7wYuAq5Pcj5wI/BgVW0FHuyWJUmrqO9wr6rnq+rL3eM/B54ANgE7gL3dtL3AFYMWKUlamaHcOCzJJPATwKPARFU9D/O/AJKcM4x9nMi4bq4kqR3jzJE7Lzt9JNtNVQ22gWQD8IfALVX12SQvVdXGBetfrKrXnXdPsgvYBTAxMXHBzMxMX/s/8OzL/RU+ZBOnwQuvjLuKtcN+LHYy9WPbpjNGuv25uTk2bNgw0n2s1Dhz5LwzTum7H9u3b99fVVNLrRso3JO8Cbgf+P2q+s1u7ElgujtqPxeYrap3vdF2pqamat++fX3VsFaO3HdvO8ptB7yD8jH2Y7GTqR+jvuXv7Ows09PTI93HSo37yL3ffiQ5YbgPcrVMgNuBJ44Fe+c+YGf3eCdwb7/7kCT1Z5BDiYuBnwMOJPlqN/ZrwK3A3UmuA54BrhysREnSSvUd7lX1R0BOsPrSfrcrSRqc71CVpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNejkuNmFpHVhrdwrqgUeuUtSgwx3SWqQp2UkLTLqUyO7tx3lWk+/jJxH7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBIwv3JJcleTLJwSQ3jmo/kqTXG0m4JzkF+HfAB4HzgauTnD+KfUmSXm9UR+4XAger6umq+j4wA+wY0b4kSccZVbhvAr69YPlwNyZJWgWpquFvNLkS+EBV/VK3/HPAhVX10QVzdgG7usV3AU8OvZDVdTbwnXEXsYbYj8Xsx2vsxWKD9OOvV9U7lloxqnvLHAa2LFjeDDy3cEJV7QH2jGj/qy7JvqqaGncda4X9WMx+vMZeLDaqfozqtMyfAFuTnJfkzcBVwH0j2pck6TgjOXKvqqNJ/jHw+8ApwB1V9fgo9iVJer2R3fK3qr4AfGFU21+DmjnFNCT2YzH78Rp7sdhI+jGSP6hKksbL2w9IUoMM9z4kuSPJkSSPLRg7K8kDSZ7qvp45zhpXS5ItSR5K8kSSx5Pc0I2v1368NcmXknyt68e/6MbPS/Jo14/PdBcarAtJTknylST3d8vruReHkhxI8tUk+7qxkbxWDPf+3AlcdtzYjcCDVbUVeLBbXg+OArur6t3ARcD13a0m1ms/XgUuqaofB94HXJbkIuA3gE90/XgRuG6MNa62G4AnFiyv514AbK+q9y24/HEkrxXDvQ9V9TDw3eOGdwB7u8d7gStWtagxqarnq+rL3eM/Z/5FvIn124+qqrlu8U3dvwIuAe7pxtdNP5JsBi4H/lO3HNZpL97ASF4rhvvwTFTV8zAfeMA5Y65n1SWZBH4CeJR13I/uNMRXgSPAA8D/Al6qqqPdlPV0O47fAn4V+Mtu+e2s317A/C/6LybZ371LH0b0WhnZpZBaX5JsAP4r8E+r6s/mD9DWp6r6AfC+JBuBzwHvXmra6la1+pJ8CDhSVfuTTB8bXmJq871Y4OKqei7JOcADSb45qh155D48LyQ5F6D7emTM9ayaJG9iPtg/XVWf7YbXbT+OqaqXgFnm/xaxMcmxg6nX3Y6jURcDH05yiPk7w17C/JH8euwFAFX1XPf1CPO/+C9kRK8Vw3147gN2do93AveOsZZV051DvR14oqp+c8Gq9dqPd3RH7CQ5Dfgp5v8O8RDwkW7auuhHVd1UVZurapL5W5D8QVVdwzrsBUCS05P80LHHwE8DjzGi14pvYupDkruAaebv5vYCcDPwu8DdwF8DngGurKrj/+janCR/B/gfwAFeO6/6a8yfd1+P/Xgv838UO4X5g6e7q+pfJvkR5o9ezwK+AvxsVb06vkpXV3da5mNV9aH12ovu5/5ct3gq8J+r6pYkb2cErxXDXZIa5GkZSWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoP+HyeG6MrSZTiQAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "###题目一：\n",
    "##连续性数据可视化函数\n",
    "#直方图\n",
    "fig = plt.figure()\n",
    "sns.distplot(df_data[\"MEDV\"],bins=50,kde=False)\n",
    "plt.xlabel(\"MEDV\")\n",
    "plt.ylabel(\"Number\")\n",
    "plt.show()\n",
    "#pandas 直方图\n",
    "df_data['MEDV'].hist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x180fe1b4a58>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#箱型图\n",
    "sns.boxplot(data=df_data['MEDV'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x180fe217a58>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#violinplt \n",
    "sns.violinplot(data=df_data['MEDV'])\n",
    "##类别性数据函数\n",
    "#条形图\n",
    "sns.countplot(df_data['CHAS'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x180fe281e48>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#题目二：\n",
    "#计算特征之间的相关系数\n",
    "\n",
    "#取列名\n",
    "cols = df_data.columns\n",
    "#计算相关系数\n",
    "corr_data = df_data.corr()\n",
    "corr_abs = corr_data.abs()\n",
    "#画热力图\n",
    "sns.heatmap(corr_data)\n",
    "sns.heatmap(corr_abs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x180fe3c7978>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#计算协方差\n",
    "cov = df_data.cov()\n",
    "sns.heatmap(cov)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lr:0.755482,0.705815,Ridge:0.755417,0.706805,Lasso:0.755009,0.707495\n"
     ]
    }
   ],
   "source": [
    "#题目三：\n",
    "#特征共线性较强时的处理方法：\n",
    "#1、通过相关系数判断具有共线性的特征，通过筛选特征，降低共线特征，即通过降维的方式去掉部分共线性较强的特征。\n",
    "#2、通过添加正则项，降低特征之间的共线性\n",
    "#通常来说，因为L2正则项对各参数的收缩非0处理，可以比L1更好的处理特征共线性强的问题。\n",
    "#但是对于样本中，较强相关性的特征对模型的关系并不是都重要的情况下，可以通过L1正则将部分相关性较强的特征去掉，只留下其中一个特征，得到稀疏矩阵，减少存储，加快运算。\n",
    "#题目四：\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.preprocessing import MinMaxScaler \n",
    "from sklearn.model_selection import train_test_split\n",
    "x_rad = df_data.RAD #抽取RAD特征\n",
    "x_res = df_data.drop('RAD',axis=1)#去掉RAD特征\n",
    "fea_name = x_res.columns\n",
    "x_rad = x_rad.astype('object')\n",
    "x_rad = pd.get_dummies(x_rad,prefix='RAD')\n",
    "sX = StandardScaler()\n",
    "sY = StandardScaler\n",
    "mX = MinMaxScaler()\n",
    "mY = MinMaxScaler()\n",
    "s_fea = sX.fit_transform(x_res)\n",
    "m_fea = mX.fit_transform(x_res)\n",
    "s_data = pd.DataFrame(data = s_fea , columns = fea_name, index=df_data.index)#Standard 标准化数据\n",
    "m_data = pd.DataFrame(data = m_fea, columns = fea_name, index=df_data.index)#MinMax 标准化数据\n",
    "s_con = pd.concat([s_data,x_rad],axis=1,ignore_index=False) #standard 数据合并\n",
    "m_con = pd.concat([m_data,x_rad],axis=1,ignore_index=False) #MinMax 数据合并\n",
    "s_x = s_con.drop('MEDV',axis=1)#分离特征\n",
    "m_x = m_con.drop('MEDV',axis=1)#分离特征\n",
    "s_y = s_con['MEDV']#分离结果\n",
    "m_y = m_con['MEDV']#分离结果\n",
    "#分离训练和测试集\n",
    "train_sx,test_sx,train_sy,test_sy = train_test_split(s_x,s_y,test_size=0.2,random_state=26)#standard 数据训练测试集\n",
    "train_mx,test_mx,train_my,test_my = train_test_split(m_x,m_y,test_size=0.2,random_state=26)#standard 数据训练测试集\n",
    "#建立学习器\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.linear_model import RidgeCV\n",
    "from sklearn.linear_model import LassoCV\n",
    "lr = LinearRegression()#线性回归\n",
    "#超参数范围\n",
    "#alphas = [0.01,0.1,1,10,100] 手动设置参数\n",
    "Rcv = RidgeCV(alphas=alphas, store_cv_values=True)#L2回归\n",
    "lasso = LassoCV(eps=0.001,n_alphas=100)\n",
    "#训练并测试\n",
    "#线性回归\n",
    "lr.fit(train_mx,train_my)\n",
    "m_test_pre_lr = lr.predict(test_mx)\n",
    "m_train_pre_lr = lr.predict(train_mx)\n",
    "#L2\n",
    "Rcv.fit(train_mx,train_my)\n",
    "m_test_pre_Ridge = Rcv.predict(test_mx)\n",
    "m_train_pre_Ridge = Rcv.predict(train_mx)\n",
    "#L1\n",
    "lasso.fit(train_mx,train_my)\n",
    "m_test_pre_lasso = lasso.predict(test_mx)\n",
    "m_train_pre_lasso = lasso.predict(train_mx)\n",
    "\n",
    "#题目五：\n",
    "#模型评价\n",
    "#线性回归 \n",
    "from sklearn.metrics import r2_score\n",
    "lr_r2_train = r2_score(train_my,m_train_pre_lr,multioutput='uniform_average') \n",
    "lr_r2_test = r2_score(test_my,m_test_pre_lr,multioutput='uniform_average')\n",
    "#L2\n",
    "Ridge_r2_train = r2_score(train_my,m_train_pre_Ridge,multioutput='uniform_average')\n",
    "Ridge_r2_test = r2_score(test_my,m_test_pre_Ridge,multioutput='uniform_average')\n",
    "#L1\n",
    "lasso_r2_train = r2_score(train_my,m_train_pre_lasso,multioutput='uniform_average')\n",
    "lasso_r2_test = r2_score(test_my,m_test_pre_lasso,multioutput='uniform_average')\n",
    "print('lr:%f,%f,Ridge:%f,%f,Lasso:%f,%f'%(lr_r2_train,lr_r2_test,Ridge_r2_train,Ridge_r2_test,lasso_r2_train,lasso_r2_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ridge_alpha:0.100000,lasso_alpha:0.000138\n"
     ]
    }
   ],
   "source": [
    "#查看最优超参数\n",
    "print('ridge_alpha:%f,lasso_alpha:%f'%(Rcv.alpha_,lasso.alpha_))\n",
    "#从结果可以看出虽然lasso回归在训练集上的效果率低于线性回归和岭回归，但是在测试集上的效果要略由于其他两个模型\n",
    "#在模型选择方面，当存在共线性特征较多的时候，使用岭回归可以收缩特征参数，但不置于0,\n",
    "#可以在保留所有特征的情况下，解决共线性的问题\n",
    "#但是在特征维度较多，且存在一些无关特征的时候，使用Lasso回归，可以将无关特征参数置于0\n",
    "#得到稀疏矩阵，消除一些无关特征对模型的干扰"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
